package pe.gov.mtc.dgac.licencias.persistence;

import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import pe.gov.mtc.dgac.licencias.bean.HallazgoTO;
import pe.gov.mtc.dgac.licencias.util.Utiles;

/**
 *
 * @author elvis
 */
@Repository
public class HallazgoHibDAO extends HibernateDaoSupport implements HallazgoDAO{

    private final static Logger logger = Logger.getLogger(HallazgoHibDAO.class);
    
    @Autowired
    public HallazgoHibDAO(SessionFactory sessionFactory){
         setHibernateTemplate( new HibernateTemplate(sessionFactory));
    }
    
    public List<HallazgoTO> listarHallazgos(int auditoria, int codProcedimiento) {
        logger.debug("AUd = "+auditoria+"  PROCe="+ codProcedimiento);
        DetachedCriteria criteria = DetachedCriteria.forClass(HallazgoTO.class);
        DetachedCriteria criteria2  = criteria.createCriteria("auditoriaProcedimientoTO");
        logger.debug("listarHallazgos()");
        if( !Utiles.nullToBlank( auditoria ).equals("0")){
             criteria2.add( Restrictions.eq("auditoriaTO.codAuditoria", new Long(auditoria) )) ;
        }
        if( !Utiles.nullToBlank( codProcedimiento ).equals("0")){
             criteria2.add( Restrictions.eq("procedimientoTO.codProcedimiento", new Long(codProcedimiento) ));
        }
        return getHibernateTemplate().findByCriteria(criteria);
    }

    public void registrarHallazgo(HallazgoTO hallazgo) {
        this.getHibernateTemplate().saveOrUpdate(hallazgo);
    }

    public HallazgoTO obtenerHallazgo(int codHallazgo) {
         Query query = getSession().createQuery(" from HallazgoTO a where codHallazgo = :id ")
        .setInteger("id", codHallazgo);
        return (HallazgoTO) query.uniqueResult();
    }

    public void eliminarHallazgo(int idHallazgo) {
        getSession().createQuery(" delete from  HallazgoTO where codHallazgo = :id ")
        .setInteger("id", idHallazgo)
        .executeUpdate();
    }

}
